using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BANSACH.BusinessLayer.DataLayer;
using BANSACH.BusinessLayer;
namespace BANSACH_GUI
{
    public partial class frmTblNXBList : FormBase
    {
        DataView data;
        TblNXBFactory objDao = new TblNXBFactory();
        TblNXB objEnity;
        TblNXBKeys objKeys;
        int idRowSelected = -1;

        public frmTblNXBList()
        {
            InitializeComponent();
        }
        private void frmTblNXBList_Load(object sender, EventArgs e)
        {
            // Thiết lập các cột, thuộc tính cho Grid
            CreateConfigGrid();
            // Đọc danh sách nhà xuất bản
            objDao = new TblNXBFactory();
            objEnity = new TblNXB();
            data = objDao.GetAll().DefaultView;
            // Hiển thị lên Grid
            grvData.DataSource = data;
        }
        private void CreateConfigGrid()
        {
            grvData.ModeColorRow = 1;
            grvData.SetColorRow(System.Drawing.Color.AliceBlue);
            // Thêm các cột hiển thị dữ liệu cho Grid
			grvData.AddColumns("TextBox","MaNXB","Mã NXB",100,true,true,"ML","");
			grvData.AddColumns("TextBox","TenNXB","Tên NXB",300,true,true,"ML","");
			grvData.AddColumns("TextBox","DiaChi","Địa chỉ",250,true,true,"ML","");
			grvData.AddColumns("TextBox","Email","Email",200,true,true,"ML","");
			grvData.AddColumns("TextBox","DienThoai","Điện thoại",200,true,true,"ML","");
        }
        private void txtFind_TextChanged(object sender, EventArgs e)
        {
            SetDataFilter();
        } 
        private void SetDataFilter()
        {
            try
            {
                StringBuilder filter = new StringBuilder("1=1");  
                // Nếu nhập tên NXB
                if (f_ten.Text.Trim() != "")
                    filter.AppendFormat(" AND TenNXB LIKE '%{0}%'", f_ten.Text.Trim());
                // Nếu nhập địa chỉ Email
                if (f_email.Text.Trim() != "")
                    filter.AppendFormat(" AND Email LIKE '%{0}%'", f_email.Text.Trim());
                data.RowFilter = filter.ToString();
            }
            catch
            { }
        }
        private void btnNew_Click(object sender, EventArgs e)
        {
            // Khai báo form chi tiết
            frmTblNXBDetail frmNew = new frmTblNXBDetail();
            // Khai báo phương thức ủy quyền
            // sẽ được thực hiện khi thêm mới thành công
            frmNew.OnAddOrEditEntity = new EventHandler(OnInserEntity);
            frmNew.ShowDialog();
        }        
        private void OnInserEntity(object sender, EventArgs e)
        { 
            TblNXB objInserted = sender as TblNXB;
            if (objInserted == null) return;            
            DataRowView newrow = data.AddNew();
            // Thêm dòng vào DataView để hiển thị lên Grid
            SetEntityToDataRowView(objInserted,newrow);
        }
        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (grvData.SelectedCells.Count == 0) return;
            idRowSelected = grvData.SelectedCells[0].RowIndex;
            objKeys = new TblNXBKeys(grvData["MaNXB", idRowSelected].Value.ToString());
            objEnity = objDao.GetByPrimaryKey(objKeys);
            frmTblNXBDetail frmEdit = new frmTblNXBDetail(objEnity);
            frmEdit.OnAddOrEditEntity = new EventHandler(OnEditEntity);
            frmEdit.ShowDialog();
        }        
        private void OnEditEntity(object sender, EventArgs e)
        {             
            DataRowView edit_Row = data[idRowSelected];
            TblNXB objEdited = sender as TblNXB;
            if (objEdited != null)
                SetEntityToDataRowView(objEdited,edit_Row);
        }
        private void SetEntityToDataRowView(TblNXB obj_Entity,DataRowView _row)
        {
            data.BeginInit();                     
		     _row["MaNXB"] = obj_Entity.MaNXB;
		     _row["TenNXB"] = obj_Entity.TenNXB;
		     _row["DiaChi"] = obj_Entity.DiaChi;
		     _row["Email"] = obj_Entity.Email;
		     _row["DienThoai"] = obj_Entity.DienThoai;
            data.EndInit();
        }
        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (grvData.SelectedCells.Count == 0) return;
            // Xác nhận lại ý định xóa của người dùng
            if (MessageBox.Show("Bạn chắc chắn xóa bản ghi này?", "Thông báo", 
                MessageBoxButtons.YesNo, MessageBoxIcon.Warning, 
                MessageBoxDefaultButton.Button2) != DialogResult.Yes) return;
            idRowSelected = grvData.SelectedCells[0].RowIndex;
            // Lấy mã (khóa chính) của nhà xuất bản
            objKeys = new TblNXBKeys(grvData["MaNXB", idRowSelected].Value.ToString());
            if (objDao.Delete(objKeys))
                data.Delete(idRowSelected);
        }

        private void btnFind_Click(object sender, EventArgs e)
        {
            gPanelFind.Visible = !gPanelFind.Visible;
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void grvData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            btnEdit_Click(sender, e);
        }

        private void grvData_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btnEdit_Click(sender, e);
            if (e.KeyCode == Keys.Delete)
                btnDelete_Click(sender, e);
        }      
      
    }
}
